package control;

import java.util.ArrayList;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import service.UsuarioService;
import utils.Constantes;
import utils.Seguranca;
import utils.Utils;

import model.Usuario;

public class UsuarioControl extends GenericControl implements IControl {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@Override
	public String executar(HttpServletRequest request,
			HttpServletResponse response) {
		this.setRequest(request);
		this.setResponse(response);
		String method = request.getParameter("acao");
		String retorno=null;
		 if (method.equals("adicionar")) {
			retorno=this.adicionar();
		}else if (method.equals("openadicionar")) {
			retorno=this.openAdicionar();
		} else if (method.equals("alterar")) {
			retorno=this.alterar();
		} else if (method.equals("validar")) {
			retorno=this.validar(request, response);
		} else if (method.equals("pesquisar")) {
			retorno=this.pesquisar();
		}else if (method.equals("openpesquisar")) {
			retorno=this.openPesquisar();
		} else if (method.equals("excluir")) {
			retorno=this.excluir();
		} 
//		 Dispatcher.showScreen(this.getRequest(), this.getResponse());
		 return retorno;
	}
	
	
	private String openPesquisar() {
		ArrayList<Usuario> usuarios = null;
		
//		int paginaAtual=1;
//		int count=0;
		
		UsuarioService servico = new UsuarioService();
		usuarios = servico.select(new Usuario(), this.getPaginacao().getPaginaAtual());
		this.getPaginacao().setCount(servico.getCount());

		
		this.setAtributoRequest("paginaAtual", this.getPaginacao().getPaginaAtual());
		this.setAtributoRequest("count", this.getPaginacao().getCount());
		
		this.setAtributoRequest(Constantes.USUARIOS, usuarios);
		return Constantes.SUCESSO;
		////Dispatcher.showScreen(request, response);
	}


	private String openAdicionar() {
		// TODO Auto-generated method stub
		//////Dispatcher.showScreen(request, response);
		return Constantes.SUCESSO;
	}


	private String excluir() {
		Usuario usuario=this.loadActionToModel();
		
		UsuarioService servico = new UsuarioService();
		servico.delete(usuario, this.getLogado());
		
		this.setAtributoRequest(Constantes.MENSAGEM, servico.getMensagem());
		if (servico.getRetorno()==Constantes.SUCESSO){
			this.openPesquisar();
			return Constantes.SUCESSO;
		}
		return Constantes.ERRO;	
		
	}


	private String pesquisar() {
		ArrayList<Usuario> usuarios = null;
		Usuario usuarioBusca = this.loadActionToModel();
		
//		int paginaAtual=1;
//		int count=0;
//		if (!Utils.isBlank(request.getParameter("paginaAtual")))
//			paginaAtual=Integer.valueOf(request.getParameter("paginaAtual"));			
		
		
		
		UsuarioService servico = new UsuarioService();
		usuarios = servico.select(usuarioBusca, this.getPaginacao().getPaginaAtual());
		this.getPaginacao().setCount(servico.getCount());

		
		this.setAtributoRequest("paginaAtual", this.getPaginacao().getPaginaAtual());
		this.setAtributoRequest("count", this.getPaginacao().getCount());
		
		this.setAtributoRequest(Constantes.USUARIOS, usuarios);
		this.setAtributoRequest("usuarioBusca", usuarioBusca);
		
		//////Dispatcher.showScreen(request, response);
		return Constantes.SUCESSO;
	}
	




	private String validar(HttpServletRequest request,
			HttpServletResponse response) {
		Usuario usuario=this.loadActionToModel();

		UsuarioService servico = new UsuarioService();
		usuario = servico.select(usuario.getLogin(), usuario.getSenha());
		
	
	
		
		Usuario session_usuario = this.getLogado();
		if (usuario == null) {

			request.removeAttribute("validade");
			this.setAtributoRequest(Constantes.MENSAGEM, "Dados incorretos.");
		}

		else {
			if (usuario.getId() == session_usuario.getId())
				this.setAtributoRequest("validade", "");
			else {
				request.removeAttribute("validade");
				this.setAtributoRequest(Constantes.MENSAGEM, "Dados incorretos.");
			}
		}

		//////Dispatcher.showScreen(request, response);
		return Constantes.SUCESSO;
	}

	private String alterar() {
		
		Usuario usuario = this.loadActionToModel();
//		usuarios somente podem alterar a si mesmos
		usuario.setId(this.getLogado().getId());

		UsuarioService servico = new UsuarioService();
		servico.update(usuario, this.getLogado());
			
		LoginControl loginControl = new LoginControl();
		loginControl.atualizar();
			
		if (servico.getRetorno().equals(Constantes.ERRO));
		this.setAtributoRequest(Constantes.DESTINO,"/html/adm/frmusuario.jsp");

		this.setAtributoRequest(Constantes.MENSAGEM, servico.getMensagem());
		return servico.getRetorno();
		////Dispatcher.showScreen(request, response);

	}

	private String adicionar() {
		Usuario usuario = this.loadActionToModel();
		UsuarioService servico = new UsuarioService();
		servico.insert(usuario, this.getLogado());
		
		if (servico.getRetorno()==Constantes.ERRO) 
			this.setAtributoRequest(Constantes.DESTINO,"/html/adm/frmusuario.jsp");

		this.setAtributoRequest(Constantes.MENSAGEM, servico.getMensagem());
		
		return servico.getRetorno();
		//Dispatcher.showScreen(request, response);

	}

	
	private Usuario loadActionToModel(){
		HttpServletRequest request = this.getRequest();
		Usuario usuario=new Usuario();
		if (!Utils.isBlank(request.getParameter(Constantes.SENHA)))
			usuario.setSenha(Seguranca.criptografar(request.getParameter(Constantes.SENHA)));
		
		if (!Utils.isBlank(request.getParameter(Constantes.LOGIN)))
			usuario.setLogin(request.getParameter(Constantes.LOGIN));
		
		if (!Utils.isBlank(request.getParameter(Constantes.EMAIL)))
			usuario.setEmail(request.getParameter(Constantes.EMAIL));
		
		if (!Utils.isBlank(request.getParameter(Constantes.NOME)))
			usuario.setNome(request.getParameter(Constantes.NOME));
		
		if (!Utils.isBlank(request.getParameter(Constantes.TELEFONE1)))
			usuario.setTelefone1(request.getParameter(Constantes.TELEFONE1));
		
		if (!Utils.isBlank(request.getParameter(Constantes.TELEFONE2)))
			usuario.setTelefone2(request.getParameter(Constantes.TELEFONE2));
		
		if (!Utils.isBlank(request.getParameter(Constantes.IDFUNCIONARIO)))
			usuario.setId(Integer.valueOf(request.getParameter(Constantes.IDFUNCIONARIO)));
		
		
		return usuario;
		
	}
	
	
}
